백준 1182번 부분수열의 합

Solution

import sys

si = sys.stdin.readline
n, s = map(int, si().split())
nums = list(map(int, si().split()))

answer = 0


def solve(k, value):
    global answer
    if k == n:
        if value == s:
            answer += 1
    else:
        # k 번째 원소 제외
        solve(k + 1, value)
        # k번째 원소 포함
        value += nums[k]
        solve(k + 1, value)


solve(0, 0)
# 진부분집합이 아닌 경우 제외
if s == 0:
    answer -= 1
print(answer)
  • 모범 풀이
import sys
n, S = map(int, sys.stdin.readline().split(' '))
nums = list(map(int, sys.stdin.readline().split(' ')))
ans = 0

def rec_func(k, value):
    if k == n:
        global ans
        if value == S:
            ans += 1

    else:
        rec_func(k + 1, value + nums[k])
        rec_func(k + 1, value)

rec_func(0, 0)
if S == 0:
    ans -= 1
print(ans)